home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.3 (Developer)…68k, x86, SPARC, PA-RISC] / NeXTSTEP 3.3 Dev Intel.iso / NextDeveloper / Source / GNU / emacs / oldXMenu / Recomp.c < prev    next >
C/C++ Source or Header  |  1991-11-16  |  2KB  |  105 lines

  1. #include "copyright.h"
  2.  
  3. /* $Header: Recomp.c,v 1.5 87/12/20 12:05:46 rws Exp $ */
  4. /* Copyright    Massachusetts Institute of Technology    1985    */
  5.  
  6. /*
  7.  * XMenu:    MIT Project Athena, X Window system menu package
  8.  *
  9.  *     XMenuRecompute - Recompute XMenu object dependencies.
  10.  *
  11.  *    Author:        Tony Della Fera, DEC
  12.  *            September, 1985
  13.  *
  14.  */
  15.  
  16. #include "XMenuInt.h"
  17.  
  18. int
  19. XMenuRecompute(display, menu)
  20.     Display *display;
  21.     register XMenu *menu;    /* Menu object to be recomputed. */
  22. {
  23.     register XMPane *p_ptr;    /* Pane pointer. */
  24.     register XMSelect *s_ptr;    /* Selection pointer. */
  25.  
  26.     register int p_num;        /* Pane serial number. */
  27.     register int s_num;        /* Selection serial number. */
  28.     
  29.     /*
  30.      * If there are no panes in the menu then return failure
  31.      * beacuse the menu is not initialized.
  32.      */
  33.     if (menu->p_count == 0) {
  34.     _XMErrorCode = XME_NOT_INIT;
  35.     return(XM_FAILURE);
  36.     }
  37.  
  38.     /*
  39.      * Recompute menu wide global values: pane window size,
  40.      * selection size and maximum selection count.
  41.      */
  42.     _XMRecomputeGlobals(display, menu);
  43.  
  44.     /*
  45.      * For each pane in the menu...
  46.      */
  47.         
  48.     p_num = 0;
  49.     for (
  50.     p_ptr = menu->p_list->next;
  51.     p_ptr != menu->p_list;
  52.     p_ptr = p_ptr->next
  53.     ){
  54.     /*
  55.      * Recompute pane dependencies.
  56.      */
  57.     if (_XMRecomputePane(display, menu, p_ptr, p_num) == _FAILURE) {
  58.         return(XM_FAILURE);
  59.     }
  60.         p_num++;
  61.     
  62.     /*
  63.      * For each selection in the pane...
  64.      */
  65.     s_num = 0;
  66.     for (
  67.         s_ptr = p_ptr->s_list->next;
  68.         s_ptr != p_ptr->s_list;
  69.         s_ptr = s_ptr->next
  70.     ) {
  71.         /*
  72.          * Recompute selection dependencies.
  73.          */
  74.         if (_XMRecomputeSelection(display, menu, s_ptr, s_num) == _FAILURE) {
  75.         return(XM_FAILURE);
  76.         }
  77.         s_num++;
  78.     }
  79.     }
  80.  
  81.     /*
  82.      * Recompute menu size.
  83.      */
  84.     if (menu->menu_style == CENTER) {
  85.     menu->width = menu->p_width + (menu->p_bdr_width << 1);
  86.     }
  87.     else {
  88.     menu->width = menu->p_width + (menu->p_bdr_width << 1) +
  89.         ((menu->p_count - 1) * menu->p_x_off);
  90.     }
  91.     menu->height = menu->p_height + (menu->p_bdr_width << 1) +
  92.     ((menu->p_count - 1) * menu->p_y_off);
  93.  
  94.     /*
  95.      * Reset the recompute flag.
  96.      */
  97.     menu->recompute = 0;
  98.  
  99.     /*
  100.      * Return successfully.
  101.      */
  102.     _XMErrorCode = XME_NO_ERROR;
  103.     return(XM_SUCCESS);
  104. }
  105.